/*
* 函数可以当做参数、返回值传递
* */
void main() {
  test((x, y) => x + y);

  test((x, y) => x * y);

  var testFunc = test3();
  print(testFunc(10, 2));
}

// test函数参数为函数
void test(int foo(int x, int y)) {
  int res = foo(10, 20);
  print('res = $res');
}

void test2(Calc calc) {
  int res = calc(10, 10);
  print('$res');
}

Calc test3() {
  return (x, y) => x - y;
}

// 直接在参数中定义函数，可读性较差，可以使用typedef在外部定义
typedef Calc = int Function(int x, int y);
